//package com.fitbet.api.web.controller.profile;
//
//import java.util.List;
//import java.util.Map;
//
//import javax.servlet.http.HttpServletRequest;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.MediaType;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.PathVariable;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import com.demo2do.core.entity.exception.BusinessException;
//import com.demo2do.core.entity.result.HttpResult;
//import com.fitbet.api.service.BetService;
//import com.fitbet.api.service.UserBetService;
//import com.fitbet.api.service.UserTransactionService;
//import com.fitbet.api.service.WalletService;
//import com.fitbet.api.web.controller.resolver.Secure;
//import com.fitbet.entity.bet.Bet;
//import com.fitbet.entity.bet.UserBet;
//import com.fitbet.entity.bet.UserBetStatus;
//import com.fitbet.entity.bet.UserBetSupport;
//import com.fitbet.entity.bet.UserBetSupportStatus;
//import com.fitbet.entity.user.User;
//import com.fitbet.entity.user.UserTransaction;
//import com.fitbet.entity.user.Wallet;
//
///**
// * 
// * @author mohanlan
// *
// */
//@Controller
//@RequestMapping("/profile")
//public class ProfileController {
//
//    private static final Logger logger = LoggerFactory.getLogger(ProfileController.class);
//
//    @Autowired
//    private BetService betService;
//
//    @Autowired
//    private UserBetService userBetService;
//
//    @Autowired
//    private WalletService walletService;
//
//    @Autowired
//    UserTransactionService userTransactionService;
//    
//    /**
//     * 个人中心首页
//     * 
//     * @author LZJ
//     * @return
//     */
//    @RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult index(@Secure User user, HttpServletRequest request) {
//        
//        HttpResult httpResult = new HttpResult();
//        
//        try {
//            
//            Wallet wallet = walletService.loadWallet(user.getUnionid());
//            
//            httpResult.success().data("user", user)
//                                .data("personal", user)
//                                .data("wallet", wallet);
//            
//        } catch (Exception e) {
//            logger.error("index error: ", e);
//            httpResult.fail("500");
//        }
//
//        return httpResult;
//    }
//    
//    /**
//     * 
//     * @param user
//     * @param request
//     * @return
//     */
//    @RequestMapping(value = "/bill", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult bill(@Secure User user, HttpServletRequest request) {
//        
//        HttpResult httpResult = new HttpResult();
//        
//        try {
//            
//            // TODO list all user transaction order by time 降序;
//            List<UserTransaction> userTransactions = userTransactionService.list();
//            
//            httpResult.success().data("user", user)
//                                .data("userTransactions", userTransactions);
//            
//        } catch (Exception e) {
//            logger.error("bill error: ", e);
//            httpResult.fail("500");
//        }
//
//        return httpResult;
//    }
//    
//    /**
//     * 
//     * @param user
//     * @param request
//     * @return
//     */
//    @RequestMapping(value = "/withdrawal", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult withdrawal(@Secure User user, HttpServletRequest request) {
//        
//        HttpResult httpResult = new HttpResult();
//        
//        try {
//            
//            Wallet wallet = walletService.loadWallet(user.getUnionid());
//            
//            httpResult.success().data("user", user)
//                                .data("personal", user)
//                                .data("wallet", wallet);
//            
//        } catch (Exception e) {
//            logger.error("bill error: ", e);
//            httpResult.fail("500");
//        }
//
//        return httpResult;
//    }
//    
//    /**
//     * 
//     * @param user
//     * @param price
//     * @return
//     */
//    @RequestMapping(value = "/withdrawal", method = RequestMethod.POST,
//            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult onWithdrawal(@Secure User user, @RequestParam("price") int price, @RequestParam("content") String content) {
//        
//        HttpResult httpResult = new HttpResult();
//        
//        try {
//            
//            userTransactionService.createTransaction(user,price,content);
//            httpResult.success().message("提现成功");
//            
//        } catch (Exception e) {
//            logger.error("onCreateUserBet error: ", e);
//            throw BusinessException.newInstance("500", "提现失败");
//        }
//        return httpResult;
//    }
//
//    /**
//     * 我（参与/投注）的活动
//     * 
//     * @author LZJ
//     * @param type
//     * @return
//     */
//    @RequestMapping(value = "/bets", method = RequestMethod.GET,
//            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult bets(@Secure User user, @RequestParam(value = "type", required = false,
//            defaultValue = "participate") String type, HttpServletRequest request) {
//        
//        HttpResult httpResult = new HttpResult();
//        
//        try {
//            
//            if ("participate".equals(type)) {
//                // 获取我参与的活动列表
//                // 根据用户找到对应自己的活动
//                List<UserBet> userBets = userBetService.list(user.getId(),
//                        new UserBetStatus[] {UserBetStatus.PAID, UserBetStatus.OPEN,
//                                UserBetStatus.OPENFAILED, UserBetStatus.CLOSE, UserBetStatus.OPENFAILED,
//                                UserBetStatus.PROCESSING, UserBetStatus.FINISHED});
//                
//                httpResult.success().data("userBets", userBets);
//            } else {
//                // 获取我投注的活动列表
//                // 根据用户查询投注的活动
//                List<UserBetSupport> userBetSupports =
//                        userBetService.listUserBetSupport(user.getId(), new UserBetSupportStatus[] {
//                                UserBetSupportStatus.PAID, UserBetSupportStatus.FINISHED});
//                httpResult.success().data("userBetSupports", userBetSupports);
//            }
//            
//            httpResult.data("user", user);
//            
//        } catch (Exception e) {
//            logger.error("onCreateUserBet error: ", e);
//            throw BusinessException.newInstance("500", "提现失败");
//        }
//        return httpResult;
//
//    }
//
//    /**
//     * 创建user bet
//     * 
//     * @param user
//     * @param betId
//     * @return
//     */
//    @RequestMapping(value = "/bets", method = RequestMethod.POST,
//            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult onCreateUserBet(@Secure User user,
//            @RequestParam("betId") Long betId) {
//
//        HttpResult httpResult = new HttpResult();
//
//        try {
//
//            Bet bet = betService.loadBet(betId);
//            Map<String, Object> data = userBetService.createUserBet(user, bet);
//            return httpResult.success().data(data);
//        } catch (Exception e) {
//            logger.error("onCreateUserBet error: ", e);
//            throw BusinessException.newInstance("500", "创建数据失败");
//        }
//    }
//
//    /**
//     * 我参与的bet详情
//     * 
//     * @param user
//     * @param betId
//     * @return
//     */
//    @RequestMapping(value = "/bets/{betId}", method = RequestMethod.GET,
//            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult betDetail(@Secure User user, @PathVariable(value = "betId") Long betId,
//            HttpServletRequest request) {
//        
//        HttpResult httpResult = new HttpResult();
//
//        try {
//
//            UserBet userBet = userBetService.loadUserBet(user.getId(), betId,
//                    new UserBetStatus[] {UserBetStatus.PROCESSING, UserBetStatus.PAID,
//                            UserBetStatus.OPEN, UserBetStatus.OPENFAILED, UserBetStatus.CLOSE,
//                            UserBetStatus.CLOSEFAILED, UserBetStatus.FINISHED});
//            
//            List<UserBetSupport> supports = userBetService.listSupports(userBet);
//            
//            return httpResult.success().data("user", user)
//                                       .data("userBet", userBet)
//                                       .data("bet", userBet.getBet())
//                                       .data("supports", supports);
//        } catch (Exception e) {
//            logger.error("onCreateUserBet error: ", e);
//            throw BusinessException.newInstance("500", "创建数据失败");
//        }
//
//    }
//
//    /**
//     * 
//     * @param user
//     * @param betId
//     * @return
//     */
//    @RequestMapping(value = "/bets/{betId}/open", method = RequestMethod.GET,
//            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult betOpen(@Secure User user, @PathVariable(value = "betId") Long betId,
//            HttpServletRequest request) {
//        
//        HttpResult httpResult = new HttpResult();
//
//        try {
//
//            UserBet userBet = userBetService.loadUserBet(user.getId(), betId,
//                    new UserBetStatus[] {UserBetStatus.PROCESSING, UserBetStatus.PAID,
//                            UserBetStatus.OPEN, UserBetStatus.OPENFAILED, UserBetStatus.CLOSE,
//                            UserBetStatus.CLOSEFAILED, UserBetStatus.FINISHED});
//            
//            return httpResult.success().data("user", user)
//                                       .data("userBet", userBet)
//                                       .data("bet", userBet.getBet());
//        } catch (Exception e) {
//            logger.error("onCreateUserBet error: ", e);
//            throw BusinessException.newInstance("500", "创建数据失败");
//        }
//
//    }
//
//    /**
//     * 开启user bet
//     * 
//     * @param user
//     * @param betId
//     * @return
//     */
//    @RequestMapping(value = "/bets/{betId}/open", method = RequestMethod.POST,
//            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult onOpenBet(@Secure User user, @PathVariable("betId") Long betId,
//            @RequestParam("weight") Float beforeWeight,
//            @RequestParam("beforeVedio") String beforeVedio) {
//
//        HttpResult httpResult = new HttpResult();
//
//        try {
//
//            UserBet userBet = userBetService.openUserBet(user.getId(), betId, beforeWeight, beforeVedio);
//            return httpResult.success().message("开启挑战成功").data("userBet", userBet);
//
//        } catch (Exception e) {
//            logger.error("onCreateUserBet error: ", e);
//            throw BusinessException.newInstance("500", "开启挑战失败");
//        }
//    }
//
//    /**
//     * 
//     * @param user
//     * @param betId
//     * @return
//     */
//    @RequestMapping(value = "/bets/{betId}/close", method = RequestMethod.GET,
//            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult betClose(@Secure User user, @PathVariable(value = "betId") Long betId,
//            HttpServletRequest request) {
//        
//        HttpResult httpResult = new HttpResult();
//
//        try {
//
//            UserBet userBet = userBetService.loadUserBet(user.getId(), betId,
//                    new UserBetStatus[] {UserBetStatus.PROCESSING, UserBetStatus.PAID,
//                            UserBetStatus.OPEN, UserBetStatus.OPENFAILED, UserBetStatus.CLOSE,
//                            UserBetStatus.CLOSEFAILED, UserBetStatus.FINISHED});
//            return httpResult.success().data("userBet", userBet)
//                                       .data("user", user);
//
//        } catch (Exception e) {
//            logger.error("onCreateUserBet error: ", e);
//            throw BusinessException.newInstance("500", "开启挑战失败");
//        }
//    }
//
//    /**
//     * 开启user bet
//     * 
//     * @param user
//     * @param betId
//     * @return
//     */
//    @RequestMapping(value = "/bets/{betId}/close", method = RequestMethod.POST,
//            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    public @ResponseBody HttpResult onCloseBet(@Secure User user, @PathVariable("betId") Long betId,
//            @RequestParam("weight") Float afterWeight,
//        @RequestParam("afterVedio") String afterVedio) {
//
//        HttpResult httpResult = new HttpResult();
//
//        try {
//
//            UserBet userBet = userBetService.closeUserBet(user.getId(), betId, afterWeight, afterVedio);
//            return httpResult.success().message("开启挑战成功").data("userBet", userBet);
//
//        } catch (Exception e) {
//            logger.error("onCreateUserBet error: ", e);
//            throw BusinessException.newInstance("500", "开启挑战失败");
//        }
//    }
//}
